--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/electron/safeConsole.test.js 087fd6ea74d4fcb69048b9e77541d6bc9477dcd1 (087fd6ea) Text, 5.03 KB
T8b949e// SPDX-License-Identifier: 0BSD
Tff7b72import Tb4b4b4{ Te6edf3createRequire Tb4b4b4} Tff7b72from Ta5d6ff"module"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3beforeEachTb4b4b4, Te6edf3describeTb4b4b4, Te6edf3expectTb4b4b4, Te6edf3itTb4b4b4, Te6edf3vi Tb4b4b4} Tff7b72from Ta5d6ff"vitest"Tb4b4b4;
Tff7b72const Te6edf3require Tff7b72= Te6edf3createRequireTb4b4b4(Tff7b72importTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72const Tb4b4b4{
Te6edf3isBrokenPipeErrorTb4b4b4,
Te6edf3installBrokenPipeGuardsTb4b4b4,
Te6edf3safeConsoleLogTb4b4b4,
Te6edf3shouldMirrorStdoutTb4b4b4,
Te6edf3createMainProcessLoggerTb4b4b4,
Te6edf3ELECTRON_LOG_PREFIXTb4b4b4,
Tb4b4b4} Tff7b72= Te6edf3requireTb4b4b4(Ta5d6ff"../../electron/safeConsole"Tb4b4b4)Tb4b4b4;
Te6edf3describeTb4b4b4(Ta5d6ff"safeConsole"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viTb4b4b4.Te6edf3restoreAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"detects EPIPE by code and message"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3isBrokenPipeErrorTb4b4b4(Tb4b4b4{ Te6edf3codeTff7b72: Ta5d6ff"EPIPE" Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isBrokenPipeErrorTb4b4b4(Tb4b4b4{ Te6edf3errnoTff7b72: Ta5d6ff"EPIPE" Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isBrokenPipeErrorTb4b4b4(Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"write EPIPE"Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isBrokenPipeErrorTb4b4b4(Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"other"Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isBrokenPipeErrorTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"installBrokenPipeGuards ignores EPIPE stream errors"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3handlers Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3stream Tff7b72= Tb4b4b4{
Te6edf3onTb4b4b4(Te6edf3eventTb4b4b4, Te6edf3handlerTb4b4b4) Tb4b4b4{
Te6edf3handlersTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4[Te6edf3eventTb4b4b4, Te6edf3handlerTb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3installBrokenPipeGuardsTb4b4b4(Tb4b4b4{ Te6edf3stdoutTff7b72: Te6edf3streamTb4b4b4, Te6edf3stderrTff7b72: Tff7b72null Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3handlersTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3handlersTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"error"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3handlersTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4(Tb4b4b4{ Te6edf3codeTff7b72: Ta5d6ff"EPIPE" Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toThrowTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3installBrokenPipeGuardsTb4b4b4(Tb4b4b4{ Te6edf3stdoutTff7b72: Te6edf3streamTb4b4b4, Te6edf3stderrTff7b72: Tff7b72null Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3handlersTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"safeConsoleLog swallows EPIPE from console.log"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3spy Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3consoleTb4b4b4, Ta5d6ff"log"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3err Tff7b72= Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"write EPIPE"Tb4b4b4)Tb4b4b4;
Te6edf3errTb4b4b4.Te6edf3code Tff7b72= Ta5d6ff"EPIPE"Tb4b4b4;
Tff7b72throw Te6edf3errTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3safeConsoleLogTb4b4b4(Ta5d6ff"backend line"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toThrowTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3spyTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Ta5d6ff"backend line"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"safeConsoleLog rethrows non-EPIPE errors"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3consoleTb4b4b4, Ta5d6ff"log"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"boom"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3safeConsoleLogTb4b4b4(Ta5d6ff"x"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toThrowTb4b4b4(Ta5d6ff"boom"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"shouldMirrorStdout is false without a TTY unless forced"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3shouldMirrorStdoutTb4b4b4(Tb4b4b4{ Te6edf3stdoutTff7b72: Tb4b4b4{ Te6edf3isTTYTff7b72: Tff7b72false Tb4b4b4} Tb4b4b4}Tb4b4b4, Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3shouldMirrorStdoutTb4b4b4(Tb4b4b4{ Te6edf3stdoutTff7b72: Tb4b4b4{ Te6edf3isTTYTff7b72: Tff7b72true Tb4b4b4} Tb4b4b4}Tb4b4b4, Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(
Te6edf3shouldMirrorStdoutTb4b4b4(Tb4b4b4{ Te6edf3stdoutTff7b72: Tb4b4b4{ Te6edf3isTTYTff7b72: Tff7b72false Tb4b4b4} Tb4b4b4}Tb4b4b4, Tb4b4b4{ Te6edf3MESHCHAT_FORCE_STDOUT_LOGTff7b72: Ta5d6ff"1" Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(
Te6edf3shouldMirrorStdoutTb4b4b4(Tb4b4b4{ Te6edf3stdoutTff7b72: Tb4b4b4{ Te6edf3isTTYTff7b72: Tff7b72true Tb4b4b4} Tb4b4b4}Tb4b4b4, Tb4b4b4{ Te6edf3MESHCHAT_DISABLE_STDOUT_LOGTff7b72: Ta5d6ff"1" Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"createMainProcessLogger appends durable lines and skips non-TTY stdout"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3writes Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3mkdirCalls Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3logger Tff7b72= Te6edf3createMainProcessLoggerTb4b4b4(Tb4b4b4{
Te6edf3getLogsDirTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Ta5d6ff"/tmp/meshchat-logs"Tb4b4b4,
Te6edf3mkdirSyncTff7b72: Tb4b4b4(Te6edf3dirTb4b4b4, Te6edf3optsTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3mkdirCallsTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4[Te6edf3dirTb4b4b4, Te6edf3optsTb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3appendFileSyncTff7b72: Tb4b4b4(Te6edf3fileTb4b4b4, Te6edf3dataTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3writesTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4[Te6edf3fileTb4b4b4, Te6edf3dataTb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3consoleSpy Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3consoleTb4b4b4, Ta5d6ff"log"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3loggerTb4b4b4.Te6edf3writeTb4b4b4(Ta5d6ff"backend ready"Tb4b4b4, Tb4b4b4{
Te6edf3procTff7b72: Tb4b4b4{ Te6edf3stdoutTff7b72: Tb4b4b4{ Te6edf3isTTYTff7b72: Tff7b72false Tb4b4b4} Tb4b4b4}Tb4b4b4,
Te6edf3envTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3consoleSpyTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3mkdirCallsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3writesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3writesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"/tmp/meshchat-logs/meshchatx.log"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3writesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Te6edf3ELECTRON_LOG_PREFIXTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3writesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"backend ready"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"createMainProcessLogger mirrors to stdout when TTY is present"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3logger Tff7b72= Te6edf3createMainProcessLoggerTb4b4b4(Tb4b4b4{
Te6edf3getLogsDirTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Ta5d6ff"/tmp/meshchat-logs"Tb4b4b4,
Te6edf3mkdirSyncTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3appendFileSyncTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3consoleSpy Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3consoleTb4b4b4, Ta5d6ff"log"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3loggerTb4b4b4.Te6edf3writeTb4b4b4(Ta5d6ff"tty line"Tb4b4b4, Tb4b4b4{
Te6edf3procTff7b72: Tb4b4b4{ Te6edf3stdoutTff7b72: Tb4b4b4{ Te6edf3isTTYTff7b72: Tff7b72true Tb4b4b4} Tb4b4b4}Tb4b4b4,
Te6edf3envTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3consoleSpyTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Ta5d6ff"tty line"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"createMainProcessLogger buffers until logs dir is available"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72let Te6edf3logsDir Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3writes Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3logger Tff7b72= Te6edf3createMainProcessLoggerTb4b4b4(Tb4b4b4{
Te6edf3getLogsDirTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3logsDirTb4b4b4,
Te6edf3mkdirSyncTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3appendFileSyncTff7b72: Tb4b4b4(Te6edf3fileTb4b4b4, Te6edf3dataTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3writesTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4[Te6edf3fileTb4b4b4, Te6edf3dataTb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3loggerTb4b4b4.Te6edf3writeTb4b4b4(Ta5d6ff"early"Tb4b4b4, Tb4b4b4{ Te6edf3mirrorStdoutTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3writesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3loggerTb4b4b4.Te6edf3_pendingForTestsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3logsDir Tff7b72= Ta5d6ff"/tmp/meshchat-logs"Tb4b4b4;
Te6edf3loggerTb4b4b4.Te6edf3writeTb4b4b4(Ta5d6ff"later"Tb4b4b4, Tb4b4b4{ Te6edf3mirrorStdoutTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3writesTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanOrEqualTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3joined Tff7b72= Te6edf3writesTb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3entryTb4b4b4) Tb4b4b4=> Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff""Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3joinedTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"early"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3joinedTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"later"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3loggerTb4b4b4.Te6edf3_pendingForTestsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────